package com.ch11.config;

import com.ch11.dao.UserDao;
import com.ch11.service.UserService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName AppConfig
 * @Description TODO
 * @Author Kx
 * @Date 2025/4/30 15:03
 * @Version 1.0
 */


/**
 * @author: kx
 * @date: 2025/4/30 15:04
 * @description: 配置类的Lite模式(非代理模式)和Full模式(代理模式)
 * 但这个配置类上标注了@Configuration注解时,并且proxyBeanMethods属性设置为true时,这个就是代理模式(Full模式): 就是spring会为配置类创建代理对象,代理配置类中带有@Bean注解标注的方法,如果多次调用,代理对象会去容器中查找对应的Bean对象,如果容器中没有,就会创建一个,如果容器中有,就会直接返回容器中的Bean对象.
 * 如果proxyBeanMethods属性设置为false,这个就是Lite模式(非代理模式): 就是spring会为配置类创建对象,配置类中带有@Bean注解标注的方法,如果多次调用,spring会创建多个对象.
*/
@Configuration(proxyBeanMethods = true)
public class AppConfig {
    @Bean
    public UserDao userDao() {
        return new UserDao();
    }

    @Bean
    public UserService userService() {
        UserDao userDao1 = userDao();
        System.out.println(userDao1);
        UserDao userDao2 = userDao();
        System.out.println(userDao2);
        return new UserService(userDao1);
    }
}
